草庐IT

Android AsyncTask 内存泄漏

全部标签

c - 测量进程的生命周期(因为它被加载到内存中)

进程是否有显示其生命周期的任何属性(自加载到内存以来)用于提取此信息的WINAPI是什么?我希望能够测量系统中任何进程的生命周期 最佳答案 我认为您在寻找GetProcessTimes函数。您提供一个进程的句柄(您可能需要具有适当的安全属性),还提供几个指向FILETIME结构的指针,您可以将其转换为SYSTEMTIMEwithFileTimeToSystemTime.FILETIME对象之一指的是进程的创建时间,这可能是可执行文件加载到内存时最接近的时间。 关于c-测量进程的生命周期(

c++ - 内存映射文件 - 映射结构而不是文件?

我对内存映射文件非常陌生,而且我对某些事情有点迷茫。我知道,如果我有一个文件,我可以使用MMaps一次加载它并从多个进程访问它。但在我的情况下,我正在创建一个附加到进程A的DLL,并且已为该DLL提供指向进程A准备的cSurface的指针。我需要与进程B共享那个cSurface的数据。我真的不想调用一个空白的MMap并将我的进程A的表面复制到其中,只是为了在进程B中再次复制它。是否可以像文件一样映射我的表面,以便MMap在创建时已经指向表面数据(就像我加载SomeTextFile.txt一样)?理论上,我的计划是在ProcA中接收一个指向表面的指针,告诉Windows以给定的名称共享该

windows - IOCP 循环终止可能导致内存泄漏?如何优雅地关闭 IOCP 循环

我有经典的IOCP回调,它以这种方式使i/o挂起的请求出列、处理它们并释放它们:structMyIoRequest{OVERLAPPEDo;/*...otherparams...*/};boolis_iocp_active=true;DWORDWINAPIWorkerProc(LPVOIDlpParam){ULONG_PTRdwKey;DWORDdwTrans;LPOVERLAPPEDio_req;while(is_iocp_active){GetQueuedCompletionStatus((HANDLE)lpParam,&dwTrans,&dwKey,(LPOVERLAPPED*)

c - Windows 共享内存段

我一直在用谷歌搜索这个问题,但未能找到明确的答案,所以我希望有人对WindowsVSLinux中的共享内存段有一些了解。在Linux中,有两种为IPC创建共享内存的方法:共享内存段(shmget等)和内存映射文件(mmap)。根据我的简要理解,mmap要求您在操作系统中的某处有一个实际文件来映射,而共享内存段只是内存中基于名称的段,可以由进程附加到该段上。在Windows中,似乎只有内存映射文件的等价物,您必须在某处float一个实际文件。我的问题:这实际上是Windows中唯一一种共享内存,还是它有一个用于创建非基于文件的共享内存段的API。 最佳答案

c++ - 如何强制 C++ 从磁盘分配内存?

我有数千行C++代码,这些代码在小文本文件上运行良好,但在大文本文件(例如2GB大小)上会崩溃。崩溃原因:应用占用内存。是否可以从磁盘分配内存?因为在大多数情况下,硬盘空间远大于物理内存。如果我可以从硬盘为我的应用程序借用一些空间并在使用后将它们归还,那么我的应用程序崩溃的可能性很小。以下是我的设计思路:为文件映射创建临时文件(CreateFileMapping,OpenFileMapping)强制我的应用从临时文件分配内存做一些清理工作:CloseFileMapping并删除临时文件因为我现有的代码太多,如果我的设计思路合理,我不想重新设计我的项目。我不确定这个设计思想是否可以实现。

windows - 检索进程的内存消耗

我的AutoIt脚本自动执行测试用例。我怀疑某些东西正在泄漏内存。它从10MB开始,当测试用例结束时它达到大约40MB(TaskManager值)。我希望我的AutoIt脚本在每个测试用例之后报告内存消耗。了解差异后,我可能可以找到原因。如何使用AutoIt脚本检索进程的内存消耗? 最佳答案 您正在查找WorkingSetSize,它可能与任务管理器中列出的值不完全相同。根据它的documentation,工作集是在给定时间物理映射到进程上下文的内存量。判断方法如下:$wbemFlagReturnImmediately=0x10$w

c++ - Windows - protected 共享内存

我正在寻找在Windows平台上创建共享内存块的可能性,该平台对除创建共享内存块的进程之外的所有进程都写保护。详细来说,我需要以下内容:进程(1)必须创建一个共享内存块,并且应该能够修改缓冲区。进程(2)应该能够打开并读取创建的共享内存块,但不得具有修改内容的权限。出于安全原因,这很重要。目前我有一个使用CreateFileMapping()和MapViewOfFile()创建共享内存块的解决方案,然后在进程(1)和(2)中具有读写权限,例如:HANDLEhandle=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,

winapi - 用于虚拟内存管理的新 Windows 8.1 API : `DiscardVirtualMemory()` vs `VirtualAlloc()` and `MEM_RESET` and `MEM_RESET_UNDO`

Windows8.1/Server2012RC2刚刚引入了用于虚拟内存管理的新API:OfferVirtualMemory()、ReclaimVirtualMemory()、DiscardVirtualMemory()、它们的用法非常简单,只需查看它们的名称即可。我无法理解这些API如何针对VirtualAlloc()以及标志MEM_RESET和MEM_RESET_UNDO工作,以及什么是细微差别。对于OfferVirtualMemory(),MSDN说它与VirtualAlloc()+MEM_RESET非常相似,只是它从工作集,并限制对页面的进一步访问。所以,基本上它限制了对页面的访

windows - 如何限制应用程序可以分配的内存

我需要一种方法来限制服务可以分配的内存量,以防止服务使系统饿死,类似于SQLServer允许您设置“最大服务器内存”的方式。我知道SetProcessWorkingSetSize并不完全符合我的要求,但我正在努力让它按照我认为应该的方式运行。无论我使用什么值,我的测试应用程序的工作集都没有限制。此外,如果我随后立即调用GetProcessWorkingSetSize,则返回的值不是我之前指定的值。这是我的测试应用程序使用的代码:varMinWorkingSet:SIZE_T;MaxWorkingSet:SIZE_T;beginifnotSetProcessWorkingSetSize(

windows - 使用 gflags +ust 可以更快地增加进程内存

在尝试查找Windows应用程序中的一些内存泄漏时,我遇到了gflags的问题。当我打开ust标志(为了收集内存分配堆栈跟踪)时,我的应用程序的内存增加速度比关闭该标志时快得多(它在10分钟内达到800MB最小大约。这与我在关闭标志时获得的50-100MB/天相去甚远。我读到堆栈跟踪的最大值为32MB,所以我想这应该不是问题。计算机是4xIntel(R)Xeon(R)CPUE5410@2.33GHz。如果有人能给我一些提示,我将不胜感激。谢谢! 最佳答案 堆栈跟踪数据库并不是ust标志的唯一影响。它还向每个分配添加至少32个字节,以